
/*******************************************************************************
 * @brief: 软件框架通用处理
 * @Author:   aple
 * @Date: 2022-09-02 23:35:00
 * @LastEditors: aple
 * @LastEditTime: 2022-10-23 09:13:22
 * @Verision: 1.0.0.0
 ******************************************************************************/
#ifndef COMMON_H_H
#define COMMON_H_H

/*****************************************************************************
 * @brief   std lib
 *****************************************************************************/
#include <stdint.h>
#include <string.h>
#include <stdio.h>

/*****************************************************************************
 * @brief   git lib
 *****************************************************************************/
#include "dataproc.h"
#include "pulse.h"
#include "str_ext.h"
#include "mytype.h"
#include "symbol_def.h"

/*****************************************************************************
 * @brief   framewrok
 *****************************************************************************/
#include "appcfg.h"
#include "mem_alloc.h"
#include "fun_list.h"
#include "sys_init.h"

#ifdef __cplusplus
extern "C"
{
#endif

/*****************************************************************************
 * @brief   global dbg
 *****************************************************************************/
#ifndef DBG_EN
#define DBG_EN 1
#endif

#ifndef PRINTF_EN
#define PRINTF_EN 1
#endif

/*****************************************************************************
 * @brief   shell fun
 *****************************************************************************/
#ifndef SHELL_EN
#define SHELL_EN 1
#endif
#define SHELL_CMD_BUFF_SIZE 256
#define SHELL_ARGV_MAX 12

/*****************************************************************************
 * @brief   moudle dbg
 *****************************************************************************/

/*****************************************************************************
 * @brief dgb port
 *****************************************************************************/
#define dbg_port_obj com.obj01
#if DBG_EN + PRINTF_EN + SHELL_EN > 0
#define dbg_port_init com01_Init
#define DBG_PORT_ACT 1
#else
#define dbg_port_init(...)
#define DBG_PORT_ACT 0
#endif

/*****************************************************************************
 * @brief print
 *****************************************************************************/
#define hal_print_fun
	void sys_hal_printf(const char *fmt, ...);
	void sys_hal_puts(const char *str);

/*****************************************************************************
 * @brief   common print
 *****************************************************************************/
#if PRINTF_EN > 0
#define com_print sys_hal_printf
#define com_puts sys_hal_puts
#else
#define com_print(...)
#define com_puts(...)
#endif

/*****************************************************************************
 * @brief   shell print
 *****************************************************************************/
#if SHELL_EN > 0
#define sh_print sys_hal_printf
#define sh_puts sys_hal_puts
#else
#define sh_print(...)
#define sh_puts(...)
#endif

	int shell_fun_list_exe(const char *cmd);

/*****************************************************************************
 * @brief   dbg print
 *****************************************************************************/
#if DBG_EN > 0
#define dbg_print sys_hal_printf
#define dbg_puts sys_hal_puts
#define dbg_u8_print mem_u8_disp
#define dbg_u16_print mem_u16_disp
#define dbg_u32_print mem_u32_disp
#else
#define dbg_print(...)
#define dbg_puts(...)
#define dbg_u8_print(...)
#define dbg_u16_print(...)
#define dbg_u32_print(...)
#endif

#define dbg_put_line() dbg_puts(CR SYMBOL_LINE_EQ CR);

	/***************************************************************************
	 * @brief  8位格式显示内存信息
	 * \param[in] head :添加信息头
	 * \param[in] dat  :数据地址
	 * \param[in] len  :长度
	 * \param[in] line :每行最大显示数量
	 * \retval: none
	 ***************************************************************************/
	void mem_u8_disp(const void *head, const void *dat, int len, int line);

	/***************************************************************************
	 * @brief  16位格式显示内存信息
	 * \param[in] head :添加信息头
	 * \param[in] dat  :数据地址
	 * \param[in] len  :长度
	 * \param[in] line :每行最大显示数量
	 * \retval: none
	 ***************************************************************************/
	void mem_u16_disp(const void *head, const void *dat, int len, int line);

	/***************************************************************************
	 * @brief  32位格式显示内存信息
	 * \param[in] head :添加信息头
	 * \param[in] dat  :数据地址
	 * \param[in] len  :长度
	 * \param[in] line :每行最大显示数量
	 * \retval: none
	 ***************************************************************************/
	void mem_u32_disp(const void *head, const void *dat, int len, int line);

#define DBG_FILE file_name_get(__FILE__)
#define DBG_LINE __LINE__

#include "dbg_assert.h"
#include "sh_func.h"

#ifdef __cplusplus
}
#endif

#endif /* COMMON_H_H */
